home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / trueSpace 7.6 / tS761B8Std.exe / {app} / Scripts / D3D / RsD3DZBufferFill.fx < prev    next >
Text File  |  2008-06-10  |  3KB  |  119 lines

  1. //----------------------------------------------------------------------
  2. //Z-buffer fill-rendering
  3. //
  4. //Author - Michal Valient
  5. //Copyright (C) 2004-2008 Caligari corporation
  6. //
  7. //----------------------------------------------------------------------
  8.  
  9.  
  10. uniform float4x4 mToClip;
  11.  
  12. #ifdef RsShaderHWSKINNING
  13.     #define SKIN_INDEX_SHIFT 0.001960784313725490196078431372549f
  14.     #define RTD3DMESH_MAXIMUM_BONE_COUNT 64
  15.     float4x3 RsD3DMaterialFromME_mSkinMatrices[RTD3DMESH_MAXIMUM_BONE_COUNT];
  16. #endif //RsShaderHWSKINNING
  17.  
  18.  
  19. struct VS_MATPOINT_IN {
  20.     float4 vPosition    : POSITION; //position in object space
  21. };
  22.  
  23. typedef struct {
  24.     float4 vPosition    : POSITION; //position in object space
  25.     float4 cColor       : COLOR;
  26. } VS_MATPOINT_OUT;
  27.  
  28. VS_MATPOINT_OUT VS_CMaterialZFill(in VS_MATPOINT_IN input
  29.  
  30. #ifdef RsShaderHWSKINNING
  31.                                                     , in float4 D3_vInputBlendIndices : BLENDINDICES
  32.                                                     , in float4 D3_cInputBlendWeight : BLENDWEIGHT
  33. #endif //RsShaderHWSKINNING
  34.  
  35. )
  36. {
  37.     float4 local_vertex_position;
  38.  
  39. #ifdef RsShaderHWSKINNING
  40.  
  41.     float3 tmp_position = 0;
  42.      
  43.     //Get the blend weights
  44.     float4 blend_weights = (255.0f/127.0f)*D3_cInputBlendWeight - (128.0f / 127.0f);
  45.     float4 blend_indices = D3_vInputBlendIndices * 255.0f + SKIN_INDEX_SHIFT;
  46.     
  47.     /// Skin it!
  48.     for (int bone_idx = 0; bone_idx<4; bone_idx++)
  49.     {
  50.         int matrix_idx            = (int)blend_indices[bone_idx];
  51.         float weight            = blend_weights[bone_idx];
  52.         
  53.         float3 bone_position    = weight*mul(input.vPosition,        RsD3DMaterialFromME_mSkinMatrices[matrix_idx]);
  54.         
  55.         tmp_position            += bone_position;
  56.     }
  57.  
  58.     local_vertex_position.xyz = tmp_position.xyz;
  59.     local_vertex_position.w   = 1.0f;
  60.  
  61. #else
  62.  
  63.     local_vertex_position = input.vPosition;
  64.  
  65. #endif //RsShaderHWSKINNING
  66.  
  67.     VS_MATPOINT_OUT output;
  68.     output.vPosition = mul(local_vertex_position, mToClip); //vertex clip position
  69.     output.cColor = 0;
  70.     return output;
  71. }
  72.  
  73. vertexshader VS_ZBufferFill = compile vs_2_0 VS_CMaterialZFill();
  74.  
  75. technique T_ZBufferFill_Bias
  76. {
  77.     pass P0
  78.     {
  79.         VertexShader = (VS_ZBufferFill);
  80.         PixelShader = NULL;
  81.  
  82.         AlphaBlendEnable = false;
  83.         ColorWriteEnable = 0;
  84.  
  85.         ZEnable = true;
  86.         ZFunc = LESSEQUAL;
  87.         ZWriteEnable = true;
  88.         
  89.         Lighting = false;
  90.         ShadeMode = FLAT;
  91.         FillMode = SOLID;
  92.         
  93.         CullMode = NONE;
  94.         DepthBias = (1.0f/65536.0f);
  95.     }
  96. }
  97.  
  98. technique T_ZBufferFill_NoBias
  99. {
  100.     pass P0
  101.     {
  102.         VertexShader = (VS_ZBufferFill);
  103.         PixelShader = NULL;
  104.  
  105.         AlphaBlendEnable = false;
  106.         ColorWriteEnable = 0;
  107.  
  108.         ZEnable = true;
  109.         ZFunc = LESSEQUAL;
  110.         ZWriteEnable = true;
  111.         
  112.         Lighting = false;
  113.         ShadeMode = FLAT;
  114.         FillMode = SOLID;
  115.         
  116.         CullMode = CW;
  117.     }
  118. }
  119.